# -*- coding: utf-8 -*- 
# @project : 《剑指offer》
# @Author : created by bensonrachel on 2021/7/5
# @File : 39. 对称的二叉树.py

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def isSymmetric(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        if(not root): return True
        return self.dfs(root.left,root.right)
    def dfs(self,p,q):
        if not p or not q: return not p and not q #判断两个都是空的话就返回真，其他都是假。
        if(p.val != q.val):return False#不空但是值不相等也为假。
        return self.dfs(p.left,q.right) and self.dfs(p.right,q.left)#到这里说明两颗树的根节点一样，然后就判断左的左和右的右并且左的右和右的左是否为真。


"""
解法是1.用BFS放进数组里面比较
     2.用镜像方法，先把根节点的右（或左）子树变成镜像。再判断左右是否完全一样。
     3.代码的方法，
"""